#include "lv_drive.h"
#include "ui.h"
#include "nvs_flash.h"
#include "my_wifi.h"
#include "iic_device.h"
#include "shtc3.h"
#include "cw2015.h"
#include "show.h"

#define LV_DEMO_TASK_PRIO       4               /* 任务优先级 */
#define LV_DEMO_STK_SIZE        4 * 1024        /* 任务堆栈大小 */
TaskHandle_t LV_DEMOTask_Handler;               /* 任务句柄 */
void lv_demo_task(void *pvParameters);          /* 任务函数 */

#define WIFI_SIGNAL_TASK_PRIO       2               /* 任务优先级 */
#define WIFI_SIGNAL_STK_SIZE        4 * 1024        /* 任务堆栈大小 */
TaskHandle_t WIFI_SIGNALTask_Handler;               /* 任务句柄 */
void wifi_signal_task(void *pvParameters);          /* 任务函数 */

static const char *TAG = "EXAMPLE";

void app_main(void)
{			
    esp_err_t ret;

    ret = nvs_flash_init();             /* 初始化NVS */

    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    lvgl_drive_Init();
    i2c_master_init();
    
    /* 创建LVGL任务 */
    xTaskCreatePinnedToCore((TaskFunction_t )lv_demo_task,          /* 任务函数 */
                            (const char*    )"lv_demo_task",        /* 任务名称 */
                            (uint16_t       )LV_DEMO_STK_SIZE,      /* 任务堆栈大小 */
                            (void*          )NULL,                  /* 传入给任务函数的参数 */
                            (UBaseType_t    )LV_DEMO_TASK_PRIO,     /* 任务优先级 */
                            (TaskHandle_t*  )&LV_DEMOTask_Handler,  /* 任务句柄 */
                            (BaseType_t     ) 1);                   /* 该任务哪个内核运行 */
    /* 创建wifi信号扫描任务 */
    xTaskCreatePinnedToCore((TaskFunction_t )wifi_signal_task,          /* 任务函数 */
                            (const char*    )"wifi_signal_task",        /* 任务名称 */
                            (uint16_t       )WIFI_SIGNAL_STK_SIZE,      /* 任务堆栈大小 */
                            (void*          )NULL,                  /* 传入给任务函数的参数 */
                            (UBaseType_t    )WIFI_SIGNAL_TASK_PRIO,     /* 任务优先级 */
                            (TaskHandle_t*  )&WIFI_SIGNALTask_Handler,  /* 任务句柄 */
                            (BaseType_t     ) 1);                   /* 该任务哪个内核运行 */
    initialise_wifi();
}

/**
 * @brief       LVGL运行例程
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void lv_demo_task(void *pvParameters)
{
    pvParameters = pvParameters;
    
    lvgl_port_lock(0);
    set_screen_orientation(LV_DISP_ROT_90);
    ui_init();
    lvgl_port_unlock();

    while (1){
         ShowWifi_info();//更新wifi信息
         ShowSYSET_info();//更新系统信息
         shtc3_get_temp_hum(&TEMP_MEASUREMENT,&HUM_MEASUREMENT);
         ESP_LOGI(TAG, "温湿度：%.1f℃ %.1f%%",TEMP_MEASUREMENT,HUM_MEASUREMENT);
         cw2015_get_electric_quantity(&electric_quantity);
         ESP_LOGI(TAG, "电量%d%%",electric_quantity);      
         vTaskDelay(pdMS_TO_TICKS(500));  /* 延时500毫秒 */
    }
}

/**
 * @brief       WIFI扫描任务
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void wifi_signal_task(void *pvParameters)
{
    pvParameters = pvParameters;

    while (1){
        if(wifi_state){
          wifi_information_scanning();
          show_wifi_streng();
        }
        vTaskDelay(pdMS_TO_TICKS(3000));  /* 延时1000毫秒 */
    }
}

